%fprintf("%s 共花费%d \n",sstr,profit_now);
function [reme,r_p,r_s,r_c]  = Q2f(init_data)
    global remember;
    global r_pos;
    global r_str;
    global r_cost;
    r_cost = 0;
    r_pos = 1;
    % init_data = [0.1, 4, 2; ...
    %     0.1, 18, 3;...
    %     0.1, 6, 3;...
    %     56, 6, 5];
    profit = 0;   % 生产一单位的成品总共的利润
    Defective_rate = [0,0,0];  %  生产一单位的成品a零件和b零件的次品率
    str = '';
    cost(init_data,1,profit,Defective_rate,str);
    reme = remember;
    r_p = r_pos;
    r_s = r_str;
    r_c = r_cost;
end
%  计算花费
function ret = cost(init_data,pos , profit ,Defective_rate,str)
    % 不进行检测
    % 新利润等于旧利润减去零件的花费
    profit_now = profit - init_data(pos,2);
    % 次品率等于原次品率
    Defective_rate(pos) = init_data(pos,1);
    % 加上调试信息
    sstr = str + "零件"+num2str(pos) + "不进行检查   ";
    % pos为1的话接下来去判断零件2是否检测
    % pos为2的话接下来去判断成品是否检测
    if(pos == 1)
        cost(init_data,2,profit_now,Defective_rate,sstr);
    elseif(pos == 2)
        cost_fg(init_data,profit_now,Defective_rate,sstr);
    end


    % 进行检测
    % 新利润等于旧利润减去零件的花费 再减去检测成本
    profit_now = profit - init_data(pos,2)-init_data(pos,3);
    % 检测后次品率为0
    Defective_rate(pos) = 0;
    % 加上调试信息
    sstr = str + "零件"+num2str(pos) + "进行检查   ";
    if(pos == 1)
        cost(init_data,2,profit_now,Defective_rate,sstr);
    elseif(pos == 2)
        cost_fg(init_data,profit_now,Defective_rate,sstr);
    end
end


% 调整成品
function ret = cost_fg(init_data , profit ,Defective_rate,str)
    % 不进行检测
    % 新利润等于旧利润减去组装的花费
    profit_now = profit - init_data(3,2);
    % 次品率 :1,2,成品 的基本次品率相互独立,只要算出不出错的概率再用1减去不出错的概率即可
    fg_no_error = (1-Defective_rate(1)) * (1-Defective_rate(2)) * init_data(3,1);
    Defective_rate(3) = 1 - fg_no_error;
    % 加上调试信息
    sstr = str + "成品不进行检查   ";
    
    cost_sell(init_data,profit_now,Defective_rate,sstr)


    % 进行检测
    % 新利润等于旧利润减去组装的花费 再减去检测成本
    profit_now = profit - init_data(3,2)-init_data(3,3);
    % 检测后次品率为0
    Defective_rate(3) = 0;
    % 加上调试信息
    sstr = str + "成品进行检查   ";
    cost_sell(init_data,profit_now,Defective_rate,sstr)

end
% 生产完毕,进行售卖
function ret = cost_sell(init_data , profit ,Defective_rate,str)
    % 售卖的话只需要把利润加上售价即可
    profit = profit + init_data(4,1);
    str = str + "加上利润" + num2str(init_data(4,1)) + "元  ";
    cost_after_sales(init_data , profit ,Defective_rate,str);
end

% 售卖完毕,进行售后
function ret = cost_after_sales(init_data , profit ,Defective_rate,str)
    global remember;
    global r_pos;
    global r_str;
    global r_cost;
    % 首先所有不合格商品进行调换 ,原价减去  调换花费乘成品坏的概率
    % 是否进行拆解
    profit = profit - init_data(4,2) * Defective_rate(3);
    sstr = str + "不合格进行报废";

    fprintf("%s 利润为%s \n",sstr,num2str(profit));

    remember(r_pos) = profit;
    r_pos= r_pos + 1;
    if(r_cost < profit)
        r_cost = profit;
        r_str = sstr;
    end
    % 对不合格的商品拆解时可能会获得合格的零件
    % 如果合格的零件费用大于拆解花费的话,相当于获利

    % 次品率 :1,2,成品 的基本次品率相互独立
    % 零件1不出错但是成品出错
    % 1 单位成品,不合格Defective_rate(3)个
    p_fg = 0; % 成品的合格率
    if(Defective_rate(3) == 0)
        p_fg = 0;
    else
        p_fg = init_data(3,1);
    end
    % 1 单位成品,保证零件一合格,零件2或(和)成品组装不合格 有(1 - p1) *(1 - (1 - p2)*(1 - p3)
    Unqualified_pos1_qualified = (1 - Defective_rate(1) *(1 - (1 - Defective_rate(2))*(1 - p_fg) ) );
    Unqualified_pos2_qualified = (1 - Defective_rate(2) *(1 - (1 - Defective_rate(1))*(1 - p_fg) ) );

    profit = profit - init_data(4,3); % 减去拆解费用
    % 加上新零件的费用
    profit = profit + Unqualified_pos1_qualified * init_data(1,2) + Unqualified_pos2_qualified * init_data(2,2);
    sstr = str + "不合格进行回收";

    fprintf("%s 利润为%s \n",sstr,num2str(profit));
     remember(r_pos) = profit;
    r_pos= r_pos + 1;
    if(r_cost < profit)
        r_cost = profit;
        r_str = sstr;
    end
end

















